package com.bonshotels.DomainLayer.CtrlDades;

import java.util.Set;

import com.bonshotels.DomainLayer.DomainModel.Client;
import com.bonshotels.Excepcions.ClientNoExisteix;

/**
 * Interficie ICtrlClient.
 * 
 * Aquesta interficie representa al controlador de la classe Client. Tot i que no
 * utilitzem tots els metodes hem pensat que ja que implementem el controlador 
 * limplementem amb els tres metodes utilitzats a classe de teoria, el obte (per
 * clau primaria), el obteTots i el existeix (per clau primaria). La interficie i 
 * els metodes son publics per tal que els controladors de dades HSQL, que estan
 * en un altre paquet, els puguin veure e implementar.
 * Aquesta classe es un producte abstracte dins del patro factoria abstracta.
 * @author Jordi Sabater
 */
public interface ICtrlClient {

	/**
	 * Obte el client amb DNI 'dni'.
	 *
	 * @param dni DNI del client.
	 * @return El Client amb DNI 'dni'.
	 * @throws ClientNoExisteix El client amb DNI 'dni' no existeix.
	 */
	public Client obte(String dni) throws ClientNoExisteix;
	
	/**
	 * Consulta si hi ha una instancia de Client amb DNI 'dni'.
	 *
	 * @param dni DNI del client.
	 * @return Cert si existeix el Client amb DNI 'dni'. Fals altrament.
	 */
	public boolean existeix(String dni);
	
	/**
	 * Obte totes les instancies de Client.
	 *
	 * @return Un conjunt (Set) amb totes les instancies de Client.
	 */
	public Set<Client> obteTots();
	
}
